/**
 * 用户信息工具函数
 * 提供统一的用户信息获取和管理功能
 */

/**
 * 检查用户登录状态
 * @returns {Object|null} 用户信息对象，未登录时返回null
 */
export const checkUserLogin = () => {
  try {
    const storedUserInfo = localStorage.getItem('userInfo')
    if (storedUserInfo) {
      const userInfo = JSON.parse(storedUserInfo)
      console.log('用户登录状态检查 - 当前用户信息:', userInfo)
      return userInfo
    } else {
      console.log('用户登录状态检查 - 用户未登录')
      return null
    }
  } catch (error) {
    console.error('检查用户登录状态失败:', error)
    return null
  }
}

/**
 * 获取当前用户ID
 * @returns {number|null} 用户ID，未登录时返回null
 */
export const getCurrentUserId = () => {
  const userInfo = checkUserLogin()
  if (userInfo && userInfo.userId) {
    return userInfo.userId
  }
  return null
}

/**
 * 获取当前用户ID（整数类型）- 等效于 StpUtil.getLoginIdAsInt()
 * @returns {number|null} 用户ID，未登录时返回null
 */
export const getLoginIdAsInt = () => {
  const userId = getCurrentUserId()
  return userId ? parseInt(userId) : null
}

/**
 * 获取当前用户信息
 * @returns {Object|null} 完整的用户信息对象，未登录时返回null
 */
export const getCurrentUserInfo = () => {
  return checkUserLogin()
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isUserLoggedIn = () => {
  return getCurrentUserId() !== null
}

/**
 * 获取用户Token
 * @returns {string|null} 用户Token，未登录时返回null
 */
export const getUserToken = () => {
  return localStorage.getItem('token')
}

/**
 * 清除用户登录信息
 */
export const clearUserInfo = () => {
  localStorage.removeItem('userInfo')
  localStorage.removeItem('token')
  console.log('用户登录信息已清除')
}

/**
 * 保存用户信息到本地存储
 * @param {Object} userInfo 用户信息对象
 */
export const saveUserInfo = (userInfo) => {
  try {
    localStorage.setItem('userInfo', JSON.stringify(userInfo))
    console.log('用户信息已保存到本地存储:', userInfo)
  } catch (error) {
    console.error('保存用户信息失败:', error)
  }
}

/**
 * 更新用户信息
 * @param {Object} newUserInfo 新的用户信息对象
 */
export const updateUserInfo = (newUserInfo) => {
  try {
    const currentUserInfo = checkUserLogin()
    if (currentUserInfo) {
      const updatedUserInfo = { ...currentUserInfo, ...newUserInfo }
      saveUserInfo(updatedUserInfo)
      console.log('用户信息已更新:', updatedUserInfo)
    }
  } catch (error) {
    console.error('更新用户信息失败:', error)
  }
}

/**
 * 检查用户权限
 * @param {string} requiredRole 需要的角色
 * @returns {boolean} 是否有权限
 */
export const checkUserPermission = (requiredRole) => {
  const userInfo = checkUserLogin()
  if (!userInfo || !userInfo.roles) {
    return false
  }
  
  if (Array.isArray(userInfo.roles)) {
    return userInfo.roles.includes(requiredRole)
  }
  
  return userInfo.roles === requiredRole
}

/**
 * 检查用户是否为管理员
 * @returns {boolean} 是否为管理员
 */
export const isAdmin = () => {
  const userInfo = checkUserLogin()
  if (!userInfo) {
    return false
  }
  
  return userInfo.isAdmin === true || 
         (userInfo.roles && Array.isArray(userInfo.roles) && userInfo.roles.includes('admin'))
}

/**
 * 获取用户显示名称
 * @returns {string} 用户显示名称
 */
export const getUserDisplayName = () => {
  const userInfo = checkUserLogin()
  if (userInfo && userInfo.username) {
    return userInfo.username
  }
  return '未登录用户'
}

/**
 * 格式化用户信息用于日志输出
 * @param {number} userId 用户ID
 * @returns {string} 格式化的用户信息
 */
export const formatUserInfoForLog = (userId) => {
  const userInfo = checkUserLogin()
  if (userInfo && userInfo.username) {
    return `${userInfo.username}(ID: ${userId})`
  }
  return `用户ID: ${userId}`
} 